package com.kaigejava.sparsearr;

import java.util.Arrays;

/**
 * 稀疏数组demo
 * 稀疏数组转正常的二维数组
 * 步骤：
 * 1：先读取稀疏数组的第一行，根据第一行的数据，创建原始的二维数组
 * 2：在读取稀疏数组后几行数据，并赋值给原始的二维数组
 */
public class SparseArrayToArrayDemo {

    public static void main(String[] args) {
        //获取稀疏数组
        int [] [] sparseArr = getSparseArr();
        //1：获取稀疏数组的第一行，用来创建原始二位数组
        //二维数组的行数 = 稀疏数组的第0行第0列；
        //原二维数组的列数 = 稀疏数组的第0行第1列
        int [][] arr = new int[sparseArr[0][0]][sparseArr[0][1]];
        System.out.println();
        System.out.println("还原后，未赋值的二维数组为");
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j <  arr.length; j++) {
                System.out.printf(" %d \t",arr[i][j]);
            }
            System.out.println();
        }

        //2:给原始二维数组赋值
        //需要从稀疏数组的第二行开始
        for (int i = 1; i < sparseArr.length; i++) {
            //稀疏数组的第i行中列的0：是有效数据的行；列的1：是有效数据的列；列2：有效数据的值
            arr[sparseArr[i][0]] [sparseArr[i][1]] = sparseArr[i][2];
        }
        System.out.println();
        System.out.println("还原后，赋值的二维数组为");
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j <  arr.length; j++) {
                System.out.printf(" %d \t",arr[i][j]);
            }
            System.out.println();
        }


    }

    /**
     * 获取稀疏数组
     * @return
     */
    private static int[][] getSparseArr() {
        int chessArr[][] = ArrayToSparseArrayDemo.init();
        //将二维数组转换成稀疏数组
        int [] [] sparseArr =  ArrayToSparseArrayDemo.arrchangeSparseArr(chessArr);
        return sparseArr;
    }
}
